/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7F85EB9E-50AE-4025-8732-CFF493E2F6DE",variableType:4}
 */
var es_nro_manual = 0;

/**
 * @properties={typeid:24,uuid:"E9E5DF80-C96C-47DA-B364-618753CD165F"}
 * @AllowToRunInFind
 */
function confirmar()
{
	esconderErrores()
	var $error = 0
	// VALIDACIONES
	if (!cliente_id)
	{
		elements.lbl_error_cliente.visible = true
		$error = 1
	}
	else
	{
		totalizar();
	}
	if (!fecha)
	{
		elements.lbl_error_fecha.visible = true
		$error = 1
	}
	if (total <= 0)
	{
		elements.lbl_error_total.visible = true
		$error = 1
	}
	if (!cond_pago_id)
	{
		elements.lbl_error_cond_pago.visible = true
		$error = 1
	}
	if (!fecha_validez)
	{
		elements.lbl_error_fecha_venc.visible = true
		$error = 1
	}
	if (es_nro_manual && !nro_presupuesto)
	{
		elements.lbl_error_nro_presupuesto.visible = true
		$error = 1
	}
	// ELIMINAR RENGLONES en BLANCO
	var i = 1;
	
	while (i <= presup_cabecera_to_presup_detalle.getSize())
	{
		var $rcd = presup_cabecera_to_presup_detalle.getRecord(i)
		$rcd.msj_error = ''
		if ($rcd.producto_id == null)
		{
			presup_cabecera_to_presup_detalle.deleteRecord(i)
		}
		else
		{
			if (!$rcd.cantidad)
			{
				$rcd.msj_error = '-Cantidad '
				$error = 1
			}
			if (!$rcd.precio_unitario)
			{
				$rcd.msj_error += '-P Unit.'
				$error = 1
			}
			i++
		}
	}	
	if ($error)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Por favor, complete todos los campos obligatorios','OK')
		return false
	}
	presup_estado = globals.zconf_presup_ingresado
	importe_en_letras = globals.nro_a_letra(total)
	
	// NUMERACION
	var $nro_aux
    if (es_nro_manual == 0)   //no es manual
    {
    	var fs_nro_ped = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_cl')
		fs_nro_ped.find()
		fs_nro_ped.sucursal			= sucursal
		fs_nro_ped.letra			= letra
		fs_nro_ped.cod_comprobante	= globals.zconf_numeracion_presupuesto
		var found = fs_nro_ped.search()
		if (found != 1)
	    {
		   globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Letra o Tipo de comprobante incorrectos','OK');
		   return false;  
	    }
	    $nro_aux = fs_nro_ped.ultimo_numero + 1
    }
    else
    {
    	$nro_aux = nro_presupuesto
    }
    if (globals.presupuestos_duplicacion(letra,sucursal,$nro_aux) != 0)
    {
    	globals.DIALOGS.showWarningDialog('Aviso','El presupuesto ya existe. Modifique el número del mismo','OK');
    	return false;
    }
    
    if (es_nro_manual == 0)
    {
    	fs_nro_ped.ultimo_numero = fs_nro_ped.ultimo_numero + 1
    	nro_presupuesto = $nro_aux;
    }
    
	// GRABAR TODO
	databaseManager.startTransaction()
	var estado = databaseManager.saveData()
	if (estado == true)
	{
		if (databaseManager.commitTransaction())
		{
			//  MENSAJE FINAL 
			var $msj = 'Presupuesto Nº ' + nro_presupuesto + '\nGenerado correctamente'
			globals.DIALOGS.showInfoDialog('Aviso',  $msj,  "OK" );
			var $params = {
				pFacturaId		: presup_cabecera_id,
				pRazonSocial 	: usuarios_to_uservs.razon_social,
				pDireccion		: usuarios_to_uservs.calle_nro,
				pCodPostal		: usuarios_to_uservs.cod_postal,
				pCuit			: usuarios_to_uservs.cuit,
				pCodBrutos		: usuarios_to_uservs.cod_ing_brutos,
				pIva			: usuarios_to_uservs.uservs_to_tipo_iva.tipo_iva_desc,
				pActividad		: usuarios_to_uservs.actividad,
				pTelefono		: usuarios_to_uservs.telefono,
				pEmail			: usuarios_to_uservs.email,
				pInicioActividad : usuarios_to_uservs.inicio_actividad,
				pIconoURL		: usuarios_to_uservs.url_logo,
				pPie			: usuarios_to_uservs.pie_factura	
			}
			globals.metodoJasper('impresion', 'ventas/presupuesto.jasper', 'Presupuesto_' + nro_presupuesto, 'infocom', $params)
			iniciar()
		}
		else
		{
			databaseManager.rollbackTransaction()
			databaseManager.revertEditedRecords()
			globals.DIALOGS.showWarningDialog('Aviso','No pudo guardarse por un error en la base de datos','OK')
			iniciar()
		}
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso', ' Presupuesto No fue generado - Revise los datos ingresados',  "OK")
	}
	return true
}

/**
 * @returns {Boolean} allow hide
 *
 * @properties={typeid:24,uuid:"94877CF7-C8EF-4143-88B8-ED3B1083CE46"}
 */
function salir_fac() 
{  
	if (cliente_id != null)
	{
   		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea salir?' ,  'Si', 'No')
		if (resp == 'Si')
		{
			databaseManager.revertEditedRecords();
			databaseManager.setAutoSave(true)
			return true;
		}
		else
			return false;
	}
	else
	{	
		databaseManager.revertEditedRecords();
		databaseManager.setAutoSave(true)
		return true;
	}
}

/**
 * @properties={typeid:24,uuid:"5E73AD4B-E9C3-4189-A1E2-F947484D0745"}
 */
function Cancelar() 
{
	databaseManager.revertEditedRecords();
	iniciar();
}

/**
 * @properties={typeid:24,uuid:"8A2C30EE-ABAE-4532-BB5A-D30B672A1312"}
 */
function eliminar_renglon() 
{
	var found = presup_cabecera_to_presup_detalle.getSize()
	if (found==0)
	{
		globals.iva_del_producto=null;
		descuento=null
	    iva1_imp=null
	    iva1_porc=null
	    subtotal1=null
	    subtotal2=null
	    total=null
	}
	else
	{
		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
		if (resp == 'Si')
		{
			presup_cabecera_to_presup_detalle.deleteRecord();
			
			totalizar(); // recalcula los totales
			found = presup_cabecera_to_presup_detalle.getSize();
			if (found==0)
			{
			globals.iva_del_producto=null;
			descuento=null;
		    iva1_imp=null;
		    iva1_porc=null;
		    subtotal1=null;
		    subtotal2=null;
		    total=null;
			}		
		}
	}
}

/**
 * @properties={typeid:24,uuid:"EE28F24C-1398-4B9B-A690-663A6AD91859"}
 */
function agregar_renglon() 
{
	if (cliente_id != null)
	{
		forms.presupuestos[elements.tabs_20.getTabRelationNameAt(elements.tabs_20.tabIndex)].newRecord(false);
		forms.presupuestos_1.elements.fld_producto_id.requestFocus();
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente primero','OK')
	}	
}

/**
 * Handle changed data.
 *
 * @param {Object} [oldValue] old value
 * @param {Object} [newValue] new value
 * @param {JSEvent} [event] the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"151E3CD6-749E-4881-8BA2-D5E2DE088EA7"}
 */
function onDataChange_cliente_id(oldValue, newValue, event) 
{
	globals.gCliente = cliente_id;
	
	if (cliente_id)
	{
		if (presup_cabecera_to_clientes.descuento)
			descuento_porc = presup_cabecera_to_clientes.descuento;
		if (presup_cabecera_to_clientes.cond_pago_id)
		{
			cond_pago_id = presup_cabecera_to_clientes.cond_pago_id;
		}
		if (presup_cabecera_to_clientes.vendedor_id)
			vendedor_id = presup_cabecera_to_clientes.vendedor_id;       
		else 
			vendedor_id = globals.gvendedor;
			
		if (presup_cabecera_to_clientes.bloqueado == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','El cliente está bloqueado','OK')
		}
		elements.lbl_error_cliente.visible = false
	}
	else
	{
		elements.lbl_error_cliente.visible = true
	}
	if (presup_cabecera_to_presup_detalle.getSize() == 0)
		presup_cabecera_to_presup_detalle.newRecord()
	elements.fld_fecha_venc.requestFocus()
	elements.fld_cond_pago_id.enabled = true
	return true
}

/**
 * @properties={typeid:24,uuid:"0FFE6AEE-43AC-4477-8863-018F7A4622A7"}
 */
function iniciar() 
{
	databaseManager.setAutoSave(false);
	controller.newRecord();
	descuento 		= 0;
	var $fecha 		= application.getServerTimeStamp();
	fecha 			= new Date( $fecha.getFullYear(), $fecha.getMonth(), $fecha.getDate(), 0,0,0,0)
	cond_pago_id	= globals.zparam_cond_pago_default;
	descuento_porc	= 0;
	vendedor_id		= globals.gvendedor;
	letra			= 'X'
	
	es_nro_manual	= 0
	
	elements.fld_nro_manual.visible = globals.zparam_fact_nro_manual
	esconderErrores()
	elements.fld_cliente_id.requestFocus()
	
}

/**
 * @properties={typeid:24,uuid:"5E9C331B-E022-4410-8DCB-E432EA6872E2"}
 */
function esconderErrores()
{
	elements.lbl_error_cliente.visible 			= false
	elements.lbl_error_cond_pago.visible 		= false
	elements.lbl_error_fecha.visible 			= false
	elements.lbl_error_fecha_venc.visible 		= false
	elements.lbl_error_total.visible 			= false
	elements.lbl_error_nro_presupuesto.visible 	= false
}

/**
 * @properties={typeid:24,uuid:"B7142EA6-290C-4695-959A-DF36A0CF11F9"}
 */
function alta_cliente() 
{
	databaseManager.revertEditedRecords()
	controller.loadRecords(null);
	
	globals.formEnVentana('clientes_alta','clientes_alta','Alta de Clientes')
	
	iniciar();
	if (globals.gClienteDesde != null)
	{
		cliente_id = globals.gClienteDesde //  global seteada en el form clientes_alta
		onDataChange_cliente_id();
	}
}

/**
 * @properties={typeid:24,uuid:"A6FFE50A-658C-413A-8588-A06C4D76A8F4"}
 */
function totalizar() 
{
	// SUMA RENGLONES
	iva1_imp 		= 0
	iva2_imp 		= 0
	iva3_imp 		= 0
	iva1_porc 		= null
	iva2_porc 		= null
	iva3_porc 		= null
	neto			= 0
	neto2			= 0
	neto3			= 0
	neto_no_gravado = 0
	
	var $tot_iva	= 0
	var $subtotal1 	= 0
	var $cant 		= presup_cabecera_to_presup_detalle.getSize()
	for ( var i = 1 ; i <= $cant ; i++ )
	{
		var $rcd = presup_cabecera_to_presup_detalle.getRecord(i)
		if ($rcd.producto_id)
		{
			$rcd.msj_error = ''
			if (!$rcd.cantidad)
			{
				$rcd.msj_error = '-Cantidad '
			}
			if (!$rcd.precio_unitario)
			{
				$rcd.msj_error += '-P Unit.'
			}
			var $total_r = $rcd.precio_unitario * $rcd.cantidad - $rcd.descuento_importe
			$subtotal1 	+= $total_r
			if ($rcd.presup_detalle_to_productos.grava_iva == 1)
			{
				var $iva	= $total_r * ($rcd.iva_porc / 100)
				agregaIva($rcd.iva_porc, $iva, $total_r)
				$tot_iva += $iva
			}
			else
			{
				neto_no_gravado += $total_r
			}
		}
	}
	subtotal1 		= $subtotal1
	descuento 		= ($subtotal1 * descuento_porc) / 100	 
	subtotal2 		= $subtotal1 - ($subtotal1 * descuento_porc / 100)
	neto 			= neto * (1 - descuento_porc / 100)
	neto2 			= neto2 * (1 - descuento_porc / 100)
	neto3 			= neto3 * (1 - descuento_porc / 100)
	neto_no_gravado = neto_no_gravado * (1 - descuento_porc / 100)
	// IVA PARA pie de FACTURA 
	if (presup_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_calcula != 1)
	{ //para exportacion
		total = subtotal2
	}
	else
	{ // para A
		if (presup_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_discrimina == 1)
		{ //Factura A
			total = subtotal2 + $tot_iva
		}
		else
		{ // Factura B
			total		= subtotal2
		}
	}
	if (total != 0)
	{
		elements.lbl_error_total.visible = false
	}
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"A98AA069-977B-40CD-B24F-86AD832F7D5D"}
 */
function onDataChangeNroManual(oldValue, newValue, event) {
	elements.fld_nro_factura.editable = newValue
	elements.fld_nro_factura.requestFocus()
	return true
}

/**
 * @param {Number} porcentaje
 * @param {Number} iva_importe
 * @param {Number} importe_neto
 * 
 * @properties={typeid:24,uuid:"163476D1-033D-41B0-9608-22E618955923"}
 */
function agregaIva(porcentaje, iva_importe, importe_neto)
{
	if (iva1_porc == null)
	{
		iva1_porc 	= porcentaje
		iva1_imp 	= iva_importe
		neto		= importe_neto
	}
	else
	{
		if (porcentaje != iva1_porc)
		{
			if (iva2_porc == null)
			{
				iva2_porc 	= porcentaje
				iva2_imp 	= iva_importe
				neto2		= importe_neto
			}
			else
			{
				if (porcentaje != iva2_porc)
				{
					iva3_porc 	= porcentaje
					iva3_imp 	+= iva_importe
					neto3		+= importe_neto
				}
				else
				{
					iva2_porc 	= porcentaje
					iva2_imp 	+= iva_importe
					neto2		+= importe_neto
				}
			}
		}
		else
		{
			iva1_porc 	= porcentaje
			iva1_imp 	+= iva_importe
			neto		+= importe_neto
		}
	}
}

/**
 * Callback method when the user changes tab in a tab panel or divider position in split pane.
 *
 * @param {Number} previousIndex index of tab shown before the change
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"A35CD562-96F3-4D1F-B3B6-B12FA3679B44"}
 */
function onTabChange(previousIndex, event) {
	if(elements.tabs_20.tabIndex == 2)
	{
		elements.boton_agregar.visible = false
		elements.boton_eliminar.visible = false
	}
	else
	{
		elements.boton_agregar.visible = true
		elements.boton_eliminar.visible = true
	}
}

/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"5804A1F5-53C3-49CE-AB84-9ADCA6DE60C5"}
 */
function onDataChangeFechaVencimiento(oldValue, newValue, event) {
	if (newValue)
	{
		if (newValue < fecha)
		{
			fecha_validez = oldValue
			globals.DIALOGS.showWarningDialog('Aviso','La fecha de vencimiento no puede ser menor a la fecha del presupuesto','OK')
			return true
		}
		elements.lbl_error_fecha_venc.visible = false
		forms.presupuestos_1.elements.fld_producto_id.requestFocus()
	}
	else
	{
		elements.lbl_error_fecha_venc.visible = true
	}
	
	return true
}

/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"95634E5A-4AC5-4CEC-BB6C-FEBA0695C845"}
 */
function onDataChangeFecha(oldValue, newValue, event) {
	if (newValue)
	{
		if (newValue > fecha_validez)
		{
			fecha = oldValue
			globals.DIALOGS.showWarningDialog('Aviso','La fecha no puede ser mayor a la fecha de vencimiento del presupuesto','OK')
			return true
		}
		elements.lbl_error_fecha.visible = false
	}
	else
	{
		elements.lbl_error_fecha.visible = true
	}
	return true
}
